#pragma once

#include "viml/value.h"
#include <vector>

namespace viml {

// 内建List函数声明

/**
 * len(list) - 返回列表的长度
 */
Value len_builtin(const std::vector<Value>& args);

/**
 * add(list, item) - 在列表末尾添加一个元素
 */
Value add_builtin(const std::vector<Value>& args);

/**
 * insert(list, item) 或 insert(list, idx, item) - 在指定索引位置插入一个元素
 */
Value insert_builtin(const std::vector<Value>& args);

/**
 * remove(list, idx) 或 remove(list, start, end) - 移除并返回列表中指定索引的元素或范围内的元素
 */
Value remove_builtin(const std::vector<Value>& args);

/**
 * index(list, value) 或 index(list, value, start) - 返回value在list中第一次出现的索引
 */
Value index_builtin(const std::vector<Value>& args);

/**
 * count(list, value) - 返回value在list中出现的次数
 */
Value count_builtin(const std::vector<Value>& args);

/**
 * reverse(list) - 原地反转list
 */
Value reverse_builtin(const std::vector<Value>& args);

/**
 * sort(list) - 原地对list进行升序排序
 */
Value sort_builtin(const std::vector<Value>& args);

/**
 * copy(list) - 浅拷贝list
 */
Value copy_builtin(const std::vector<Value>& args);

/**
 * deepcopy(list) - 深拷贝list
 */
Value deepcopy_builtin(const std::vector<Value>& args);

} // namespace viml